package
{
	import flash.display.Bitmap;
	import flash.display.BitmapData;
	import flash.display.Loader;
	import flash.display.MovieClip;
	import flash.display.Sprite;
	import flash.errors.MemoryError;
	import flash.events.Event;
	import flash.geom.Matrix;
	import flash.net.URLRequest;
	import flash.system.System;
	import flash.utils.ByteArray;
	
	import mx.core.mx_internal;
	import mx.events.MoveEvent;

	public class BitmapMovieClip extends Sprite implements ITickable
	{
		private var ldr:Loader = new Loader();
		private var _aniCache:Vector.<BitmapData> = new Vector.<BitmapData>();
		private var _templateBmd:BitmapData = new BitmapData(1000,600,true,0x00000000);
		private var _movieMc:MovieClip;
		private var _curFrame:int = 0;
		private var _type:int = 0;
		private var _bmdContainer:Bitmap = new Bitmap();
		public function BitmapMovieClip(url:String,type:int)
		{
			_type = type;
			ldr.contentLoaderInfo.addEventListener(Event.COMPLETE,completeHandler);
			ldr.load(new URLRequest(url));
			//_bmdContainer.y = -100;
			this.addChild(_bmdContainer);
		}
		
		private function completeHandler(e:Event):void
		{
			_movieMc = e.target.loader.content as MovieClip;
			_movieMc.stop();
			//_movieMc.cacheAsBitmap = true;
			//this.addChild(_movieMc);
			//
			//_movieMc.play();
			trace(_movieMc.totalFrames);
			var tmc:MovieClip = (_movieMc.getChildAt(0) as MovieClip);
			for(var i:int = 0;i<tmc.totalFrames;i++)
			{
				
				tmc.gotoAndStop(i+1);
				var bmd:BitmapData = _templateBmd.clone();
				t.identity();
				t.translate(0,0);
				bmd.draw(_movieMc,t);
				_aniCache.push(bmd);
			}
			this.addEventListener(Event.ENTER_FRAME,enterframeHandler);
		}
		
		public function update(step:int):void
		{
			//if(_movieMc!=null)
				//enterframeHandler();
		}
		
		public function get tickType():int
		{
			return 0;	
		}
		private var t:Matrix = new Matrix();
		private function enterframeHandler(e:Event):void
		{
			if(_type == 0)
			{
				if(_movieMc.currentFrame==_movieMc.totalFrames)
				{
					_movieMc.gotoAndStop(1);
					_curFrame = 0;
					
				}
				else
				{
					_movieMc.gotoAndStop(++_curFrame);
				}
			}
			else if(_type == 1)
			{
				/*if(_movieMc!=null && _movieMc.currentFrame<_movieMc.totalFrames)
				{
					//if(_movieMc.currentFrame%2 != 0) return;
					var bmd:BitmapData = _templateBmd.clone();
					t.identity();
					t.translate(208,74);
					bmd.draw(_movieMc,t);
					_aniCache.push(bmd);
				}
				else*/
				{
					/*if(_movieMc!=null)
					{
						_movieMc.stop();
						if(_movieMc.parent!=null)
						{
							this.removeChild(_movieMc);
							_movieMc = null;
						}}*/
					//if(_curFrame%2 == 0)
					{
						_bmdContainer.bitmapData = _aniCache[_curFrame];
					}
					_curFrame++;
					if((_curFrame)>=_aniCache.length)
					{
						_curFrame = 0;
					}
				}
			}
		}
		
	}
}